package com.hzy.fivepalace.wx.service;


import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.hzy.fivepalace.common.type.CouponsQueryTypeEnums;
import com.hzy.fivepalace.common.type.CouponsStatusEnums;
import com.hzy.fivepalace.common.util.TableDataInfo;
import com.hzy.fivepalace.db.dao.ex.DtsCouponUserMapperEx;
import com.hzy.fivepalace.db.vo.wx.WxUserCouponsVo;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 优惠券服务
 */
@Service
public class WxCouponsService {

    @Resource
    private DtsCouponUserMapperEx couponUserMapperEx;

    /**
     * 用户优惠券列表
     *
     * @param page
     * @param size
     * @param status 状态：0未使用，1已失效
     * @param userId
     * @return
     */
    public TableDataInfo getUserCouponsList(Integer page, Integer size, Integer status, Integer userId) {
        CouponsQueryTypeEnums couponsQueryTypeEnums = CouponsQueryTypeEnums.getEnum(status.intValue());
        if (null == couponsQueryTypeEnums) {
            return TableDataInfo.errorDataTable("查询类型错误");
        }
        Page p = PageHelper.startPage(page, size, true);
        List<WxUserCouponsVo> list = couponUserMapperEx.getUserCouponsList(status, userId, null);
        if (CollectionUtils.isEmpty(list)) {
            list = new ArrayList<>();
        } else {
            list.forEach(item -> {
                if (item.getStatus().intValue() == CouponsStatusEnums.TYPE0.getId() && !LocalDateTime.now().isAfter(item.getEndTime())) {//未使用并且未过期的券计算距离到期还剩多少天
                    long days = Duration.between(LocalDateTime.now(), item.getEndTime()).toDays();
                    item.setEndDays(days > 0 ? days + "天后到期" : "即将到期");
                } else if (item.getStatus().intValue() == CouponsStatusEnums.TYPE1.getId()) {
                    item.setEndDays("已使用");
                    item.setStatus(CouponsStatusEnums.TYPE1.getId());
                } else {
                    item.setEndDays("已过期");
                    item.setStatus(CouponsStatusEnums.TYPE2.getId());
                }
                item.setUserId(null);
            });
        }
        return TableDataInfo.getDataTable(list, p.getTotal());
    }


}
